INotifyPropertyChanged ইন্টারফেস MVVM প্যাটার্নে ব্যবহৃত হয় ViewModel এবং View এর মধ্যে ডেটা বাইন্ডিংয়ের মাধ্যমে ডেটার পরিবর্তন সঠিকভাবে উপস্থাপন করতে। যখন ViewModel-এর কোনো প্রপার্টির মান পরিবর্তন হয়, তখন INotifyPropertyChanged ইন্টারফেস View-এ সেই পরিবর্তনটি স্বয়ংক্রিয়ভাবে প্রতিফলিত করতে সাহায্য করে। এটি View এবং ViewModel এর মধ্যে সিঙ্ক্রোনাইজেশন বজায় রাখে, যাতে ব্যবহারকারীর ইন্টারঅ্যাকশন এবং ডেটার আপডেট একটি স্থিতিশীলভাবে সম্পাদিত হয়।
INotifyPropertyChanged ইন্টারফেস একটি ইভেন্ট প্রদান করে যার মাধ্যমে আপনি জানাতে পারেন যে একটি প্রপার্টি পরিবর্তিত হয়েছে। যখন আপনি একটি প্রপার্টি আপডেট করেন, ইভেন্টটি ট্রিগার হবে এবং সেই পরিবর্তন View-এ রিফ্লেক্ট হবে।
এটি মূলত ViewModel-এ ব্যবহৃত হয় যাতে View ডেটা পরিবর্তনের প্রতি প্রতিক্রিয়া জানাতে পারে। যখন কোনো প্রপার্টি পরিবর্তন হয়, তখন ইভেন্টটি View-এ সংশ্লিষ্ট UI উপাদানকে আপডেট করার জন্য ট্রিগার হয়।
INotifyPropertyChanged ইন্টারফেস ব্যবহার করার জন্য আপনাকে দুটি প্রধান উপাদান প্রয়োজন:
নিচে একটি সাধারণ উদাহরণ দেয়া হলো যা দেখাবে কীভাবে INotifyPropertyChanged ব্যবহার করতে হয়।
using System.ComponentModel;
public class ProductViewModel : INotifyPropertyChanged
{
private string _name;
private decimal _price;
// INotifyPropertyChanged ইভেন্ট
public event PropertyChangedEventHandler PropertyChanged;
// প্রপার্টি পরিবর্তনের সময় ইভেন্ট ট্রিগার করতে OnPropertyChanged মেথড ব্যবহার করা হয়
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
// Name প্রপার্টি
public string Name
{
get { return _name; }
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged(nameof(Name)); // PropertyChanged ইভেন্ট ট্রিগার করা
}
}
}
// Price প্রপার্টি
public decimal Price
{
get { return _price; }
set
{
if (_price != value)
{
_price = value;
OnPropertyChanged(nameof(Price)); // PropertyChanged ইভেন্ট ট্রিগার করা
}
}
}
}
এখন, ProductViewModel ক্লাসে যে প্রপার্টি পরিবর্তন হবে, সেই প্রপার্টিগুলি View-এ বাইন্ড করা যেতে পারে। যেহেতু INotifyPropertyChanged ইন্টারফেসটি ইমপ্লিমেন্ট করা হয়েছে, তাই View-এ বাইন্ড করা UI উপাদানগুলি স্বয়ংক্রিয়ভাবে আপডেট হবে যখন প্রপার্টির মান পরিবর্তন হবে।
<Window x:Class="MVVMExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MVVM Example" Height="200" Width="400">
<Grid>
<TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" Margin="10" VerticalAlignment="Top"/>
<TextBox Text="{Binding Price, UpdateSourceTrigger=PropertyChanged}" Margin="10,40,10,10" VerticalAlignment="Top"/>
</Grid>
</Window>
অবশেষে, ViewModel কে View-এর DataContext হিসাবে অ্যাসাইন করা হবে, যাতে View সঠিকভাবে ViewModel থেকে ডেটা বাইন্ড করতে পারে।
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// ViewModel কে DataContext হিসেবে সেট করা
this.DataContext = new ProductViewModel
{
Name = "Product 1",
Price = 100.0m
};
}
}
OnPropertyChanged মেথড একটি গুরুত্বপূর্ণ ফাংশন যা PropertyChanged ইভেন্টটিকে ট্রিগার করে। এই মেথডটি প্রতিটি প্রপার্টি পরিবর্তনের সময় কল করা হয়, যাতে View সংশ্লিষ্ট UI উপাদানকে আপডেট করতে পারে। এটি শুধুমাত্র সেই প্রপার্টির নাম পাস করে, যেটি পরিবর্তিত হয়েছে।
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
এতে করে View-এ বাইন্ড করা UI উপাদানগুলি PropertyChanged ইভেন্টটি ট্রিগার হওয়ার পর স্বয়ংক্রিয়ভাবে পরিবর্তিত হয়।
INotifyPropertyChanged ইন্টারফেসের মাধ্যমে ViewModel এবং View এর মধ্যে সঠিক ডেটা সিঙ্ক্রোনাইজেশন সম্ভব হয়। এটি ViewModel-এর প্রপার্টি পরিবর্তনের সাথে সাথে View-এ সেই পরিবর্তনটি প্রতিফলিত করতে সহায়তা করে। INotifyPropertyChanged ব্যবহারে কোড কমে যায় এবং UI-তে পরিবর্তন আসার সাথে সাথে স্বয়ংক্রিয়ভাবে সেগুলি আপডেট হয়, যা একটি সুষ্ঠু MVVM আর্কিটেকচারের জন্য অপরিহার্য।
common.read_more